1 | 'use strict';
|
2 |
|
3 | var Path = require('path');
|
4 | var Should = require('should');
|
5 | var IFNode = require('../');
|
6 |
|
7 | describe('Application', function() {
|
8 | describe('app = new Application', function() {
|
9 | it('should throw error for wrong alias type', function() {
|
10 | (function() {
|
11 | IFNode({
|
12 | alias: null
|
13 | });
|
14 | }).should.throw();
|
15 | });
|
16 |
|
17 | it('without parameters', function() {
|
18 | var app = IFNode();
|
19 | var app1 = IFNode();
|
20 |
|
21 | app.should.be.an.Object();
|
22 | app.should.be.equal(app1);
|
23 | });
|
24 |
|
25 | it('with parameters', function() {
|
26 | var application_path = Path.resolve(__dirname, '../examples/config');
|
27 | var application_alias = 'application';
|
28 |
|
29 | var app = IFNode({
|
30 | project_folder: application_path,
|
31 | alias: application_alias
|
32 | });
|
33 |
|
34 | app.project_folder.should.be.equal(application_path);
|
35 | app.project_folder.should.be.equal(app.projectFolder);
|
36 |
|
37 | app.alias.should.be.equal(application_alias);
|
38 | });
|
39 |
|
40 | it('should few instances', function() {
|
41 | var app1 = IFNode({
|
42 | alias: 'app1'
|
43 | });
|
44 | var app2 = IFNode({
|
45 | alias: 'app2'
|
46 | });
|
47 |
|
48 | IFNode('app1').should.be.equal(app1);
|
49 | IFNode('app2').should.be.equal(app2);
|
50 | });
|
51 | });
|
52 |
|
53 | describe('should has base properties', function() {
|
54 | var app = IFNode({
|
55 | alias: 'app-properties-check'
|
56 | });
|
57 |
|
58 | app.load();
|
59 |
|
60 | app.config.should.be.an.Object();
|
61 | app.server.should.be.an.Object();
|
62 | app.listener.should.be.a.Function();
|
63 |
|
64 | app.components.should.be.an.Object();
|
65 | app.models.should.be.an.Object();
|
66 | app.controllers.should.be.an.Object();
|
67 |
|
68 | app.id.should.be.a.String();
|
69 | app.alias.should.be.a.String();
|
70 | app.project_folder.should.be.a.String();
|
71 | app.projectFolder.should.be.a.String();
|
72 | app.backend_folder.should.be.a.String();
|
73 | app.backendFolder.should.be.a.String();
|
74 | });
|
75 |
|
76 | describe('app.require(id: string)', function() {
|
77 | var app = require('../examples/extensions/app');
|
78 |
|
79 | app.require('protected/extensions/a').should.have.property('value', 'a');
|
80 | app.require('protected/extensions/a').should.have.property('value', 'a');
|
81 | app.require('./protected/extensions/a/b').should.have.property('value', 'a/b');
|
82 | app.require('app').should.be.equal(app);
|
83 | app.require('./../extensions/app').should.be.equal(app);
|
84 | });
|
85 |
|
86 | describe('app.register(module: string|Extension|Array<string|Extension>)', function() {
|
87 | it('shouldn\'t load empty', function() {
|
88 | var app = IFNode();
|
89 |
|
90 | (function() {
|
91 | app.register();
|
92 | }).should.throw();
|
93 | });
|
94 |
|
95 | it('shouldn\'t load non-exists plugin', function() {
|
96 | var app = IFNode();
|
97 |
|
98 | (function() {
|
99 | app.register('non-exists-plugin');
|
100 | }).should.throw();
|
101 | });
|
102 |
|
103 | it('load by extension name', function(done) {
|
104 | var app = IFNode({
|
105 | project_folder: Path.resolve(__dirname, '../examples/plugins')
|
106 | });
|
107 |
|
108 | app.register('ifnode-plugins-internal');
|
109 | done();
|
110 | });
|
111 |
|
112 | it('load by external name', function(done) {
|
113 | var app = IFNode({
|
114 | project_folder: Path.resolve(__dirname, '../examples/plugins')
|
115 | });
|
116 | var ifnode_plugin_external = Path.resolve(__dirname, '../examples/plugins/node_modules/ifnode-plugins-external');
|
117 |
|
118 | app.register(ifnode_plugin_external);
|
119 | done();
|
120 | });
|
121 |
|
122 | it('load by module', function(done) {
|
123 | var app = IFNode({
|
124 | project_folder: Path.resolve(__dirname, '../examples/plugins')
|
125 | });
|
126 | var ifnode_plugin_external = require(Path.resolve(__dirname, '../examples/plugins/node_modules/ifnode-plugins-external'));
|
127 |
|
128 | app.register(ifnode_plugin_external);
|
129 | done();
|
130 | });
|
131 |
|
132 | it('load by array', function(done) {
|
133 | var app = IFNode({
|
134 | project_folder: Path.resolve(__dirname, '../examples/plugins')
|
135 | }),
|
136 | ifnode_plugin_external = require(Path.resolve(__dirname, '../examples/plugins/node_modules/ifnode-plugins-external'));
|
137 |
|
138 | app.register([
|
139 | 'ifnode-plugins-internal',
|
140 | ifnode_plugin_external
|
141 | ]);
|
142 | done();
|
143 | });
|
144 |
|
145 | it('load schema, controller, component and mixed plugins', function() {
|
146 | var app = IFNode({
|
147 | project_folder: Path.resolve(__dirname, '../examples/plugins')
|
148 | });
|
149 |
|
150 | var internal_schema = require(Path.resolve(__dirname, '../examples/plugins/protected/extensions/internal-schema'));
|
151 | var internal_component = require(Path.resolve(__dirname, '../examples/plugins/protected/extensions/internal-component'));
|
152 | var internal_controller = require(Path.resolve(__dirname, '../examples/plugins/protected/extensions/internal-controller'));
|
153 | var external_mixed_module_path = Path.resolve(__dirname, '../examples/plugins/node_modules/external-mixed');
|
154 |
|
155 | app.register([
|
156 | 'internal-schema',
|
157 | 'internal-component',
|
158 | 'internal-controller',
|
159 | external_mixed_module_path
|
160 | ]);
|
161 |
|
162 | app.load();
|
163 |
|
164 | var modules = app._modules;
|
165 |
|
166 | modules.should.containEql(internal_schema);
|
167 | modules.should.containEql(internal_component);
|
168 | modules.should.containEql(internal_controller);
|
169 | modules.should.containEql(require(external_mixed_module_path));
|
170 | });
|
171 | });
|
172 |
|
173 | describe('app.load()', function() {
|
174 | var app = IFNode({
|
175 | alias: 'app-load-test'
|
176 | });
|
177 |
|
178 | Should.equal(Object.keys(app.components).length, 0);
|
179 | Should.equal(Object.keys(app.models).length, 0);
|
180 | Should.equal(Object.keys(app.controllers).length, 0);
|
181 |
|
182 | app.load();
|
183 |
|
184 | app.components.should.be.an.Object();
|
185 | app.models.should.be.an.Object();
|
186 | app.controllers.should.be.an.Object();
|
187 | });
|
188 |
|
189 | describe('app.run(callback?: function)', function() {
|
190 | it('without callback', function(done) {
|
191 | var app = IFNode({
|
192 | alias: 'server-run-wt-callback'
|
193 | });
|
194 |
|
195 | app.run();
|
196 |
|
197 | |
198 |
|
199 |
|
200 | setTimeout(function() {
|
201 | app.down();
|
202 | done();
|
203 | }, 10);
|
204 | });
|
205 |
|
206 | it('with callback', function(done) {
|
207 | var app = IFNode({
|
208 | alias: 'server-run-with-callback'
|
209 | });
|
210 |
|
211 | app.run(function(config) {
|
212 | this.should.be.equal(app);
|
213 | this.config.should.be.equal(config);
|
214 |
|
215 | app.down();
|
216 | done();
|
217 | });
|
218 | });
|
219 | });
|
220 |
|
221 | describe('app.down(callback?: function)', function() {
|
222 | it('without callback', function(done) {
|
223 | var app = IFNode();
|
224 |
|
225 | app.run(function() {
|
226 | app.down();
|
227 | done();
|
228 | });
|
229 | });
|
230 |
|
231 | it('with callback', function(done) {
|
232 | var app = IFNode();
|
233 |
|
234 | app.run(function() {
|
235 | app.down(function() {
|
236 | done();
|
237 | });
|
238 | });
|
239 | });
|
240 | });
|
241 | });
|